package com.ym.medical.dao;

import com.ym.medical.domain.entity.DoctorServicePriceEntity;
import com.ym.medical.domain.vo.DoctorServicePriceListPcVO;
import com.ym.medical.domain.param.DoctorServicePriceQueryParam;
import com.ym.medical.domain.vo.DoctorServicePriceVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.util.Date;
import java.util.List;

/**
 * 医生问诊规则Dao接口
 *
 * @author ym
 * @date 2020-09-14
 */
@Repository
public interface DoctorServicePriceDao extends Mapper<DoctorServicePriceEntity>{

    /**
     * 查询医生问诊规则列表,PC专用不要轻易混用更改
     *
     * @param queryParam  医生问诊规则查询参数
     * @return 医生问诊规则集合
     */
    List<DoctorServicePriceListPcVO> selectListPC(DoctorServicePriceQueryParam queryParam);

    /**
     * 医生义诊内容查询
     * @param doctId
     * @param state
     * @return
     */
    List<DoctorServicePriceVo> freeClinicPrice(
            @Param("doctId") Long doctId,
            @Param("state") String state,
            @Param("order") String orderBy,
            @Param("priceId")Long priceId);

    /***
     * 医生服务图文规则对应单价查询
     * @param doctId
     * @return
     */
    List<DoctorServicePriceVo> selectServicePrice(Long doctId);

    /**
     * 图文生效的价格规则
     * @param priceId
     * @return
     */
    DoctorServicePriceVo textValidServicePrice(Long priceId);

    /**
     * 图文待生效的
     * @param doctId
     * @param textRuleId
     * @return
     */
    DoctorServicePriceVo selectTextNoEffectPrice(
            @Param("doctId") Long doctId,
            @Param("textRuleId") Long textRuleId);

    /***
     * 电话规对应价格列表
     * @param doctId
     * @return
     */
    List<DoctorServicePriceVo> selectPhoneRulePrices(Long doctId);
    /***
     * 删除规则对应的单价
     * @param textRuleId
     */
    void deleteByRuleId(Long textRuleId);
    /**
     * 查询当下修改价格是否是第一次修改
     * @return
     */
    DoctorServicePriceEntity selectCurrPrice(
            @Param("doctId") Long doctId,
            @Param("phoneRuleId") Long phoneRuleId);
    /**
     * 医生图文生效单价
     * @param doctId
     * @return
     */
    DoctorServicePriceVo effectivePrice(Long doctId);

    /**
     * 医生是否满足再次义诊
     * @param doctId
     * @return
     */
    DoctorServicePriceVo clinicService(Long doctId);

    /***
     *医生定时失效任务
     * @param nowDate
     */
    void updateToInvalidState(Date nowDate);

    /***
     * 医生定时生效任务
     * @param nowDate
     */
    void updateToValidState(Date nowDate);
}
